package com.qf.day02;

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;

/**
 *
 *
 *  二个线程之间：共享数据吗？
 *
 *  线程A  --  int i = 3;  张三用户发出一个请求 一个线程
 *
 *  ---Mysql（磁盘） -- redis（内存）（磁盘） --  map（内存）  -- list（内存）--  Application域
 *
 *  线程B  --             李四用户发出一个请求 一个线程
 *
 *
 * @author lixu
 */
public class LockDemo {
    //读写锁
    public static final ReadWriteLock readWriteLock = new ReentrantReadWriteLock();



    public static void main(String[] args) {
        LockDemo lockDemo = new LockDemo();
        //级别低
/*        Lock readLock = readWriteLock.readLock();
        readLock.lock();

        //级别高
        Lock writeLock = readWriteLock.writeLock();
        writeLock.lock();*/

        //从写锁到读锁
        lockDemo.test();
    }

    // Map map =    Tomcat  Application域  全局    Session域（过期30分钟）  内存条上

    public void test(){
        //Map map 局部变量 有线程才有此变量  栈 ：生命周期是随着方法执行出现 结束而销毁
        //写锁
        readWriteLock.writeLock().lock();
        System.out.println("获取到写锁。。。。");
        readWriteLock.readLock().lock();
        System.out.println("获取到读锁----------");
        readWriteLock.writeLock().unlock();
        System.out.println("释放写锁==============");
        readWriteLock.readLock().unlock();
        System.out.println("释放读锁++++++++++++++++");
    }
}
